#ifndef __MYLOG_H__
#define __MYLOG_H__

#include "Logger.hpp"

namespace MyLog
{
    // 1.获取指定的日志器，避免用户还需要创建
    Logger::ptr GetLogger(const std::string &name)
    {
        return LoggerManager::GetInstance().GetLogger(name);
    }
    // 2.获取默认的日志器
    Logger::ptr DefaultLogger()
    {
        return LoggerManager::GetInstance().DefaultLogger();
    }

    // 3.提供一些宏函数，方便用户使用
    #define debug(fmt,   ...) debug(__FILE__,std::to_string(__LINE__),fmt,##__VA_ARGS__)
    #define info(fmt,    ...) info(__FILE__,std::to_string(__LINE__),fmt,##__VA_ARGS__)
    #define error(fmt,   ...) error(__FILE__,std::to_string(__LINE__),fmt,##__VA_ARGS__)
    #define warning(fmt, ...) warning(__FILE__,std::to_string(__LINE__),fmt,##__VA_ARGS__)
    #define fatal(fmt,   ...) fatal(__FILE__,std::to_string(__LINE__),fmt,##__VA_ARGS__)

    //4.直接通过默认日志器进行标准输入的打印
    #define DEBUG(fmt,  ...) MyLog::DefaultLogger()->debug(fmt,##__VA_ARGS__)
    #define INFO(fmt,   ...) MyLog::DefaultLogger()->info(fmt,##__VA_ARGS__)
    #define ERROR(fmt,  ...) MyLog::DefaultLogger()->error(fmt,##__VA_ARGS__)
    #define WARNING(fmt,...) MyLog::DefaultLogger()->warning(fmt,##__VA_ARGS__)
    #define FATAL(fmt,  ...) MyLog::DefaultLogger()->fatal(fmt,##__VA_ARGS__)

    #define LOG_INFO(logger, fmt, ...) (logger)->info(fmt, ##__VA_ARGS__)
    #define LOGI(fmt, ...) LOG_INFO(DefaultLogger(), fmt, ##__VA_ARGS__)

}

#endif